﻿using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using BusinessLayer;
using ModelLayer;
using DTO;
using System.Collections.Generic;
using System.Web;
using log4net;
using System.Drawing;
using System.IO;


namespace AssessmentTool.Web
{
    [ServiceContract(Namespace = "")]
    [SilverlightFaultBehavior]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class UtenteService
    {
        private static readonly ILog log = LogManager.GetLogger(
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        [OperationContract]
        public void inserisciUtente(Utente utente,Utente superiore)
        {
            try
            {
                new UtenteLogic().inserisci(utente,superiore);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
        [OperationContract]
        public List<DTOUtente> getSottoposti(Utente utente)
        {
            try
            {

                return new UtenteLogic().getSottoposti(utente);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }

        }
        [OperationContract]
        public UtenteLogged getUtente(DTOUtente utente)
        {
            try
            {

                return new UtenteLogic().getUtente(utente,false);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }

        }
        [OperationContract]
        public UtenteLogged login(DTOUtente utente)
        {
            try
            {
                
                return new UtenteLogic().authenticate(utente);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
            
        }

        [OperationContract]
        public UtenteLogged storicizza(Sessione sessione)
        {
            try
            {
                return new UtenteLogic().storicizza(sessione);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
        [OperationContract]
        public UtenteLogged valida(Sessione sessione)
        {
            try
            {
                return new UtenteLogic().valida(sessione);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
        [OperationContract]
        public bool saveChanges(Utente utente)
        {
            try{
            new UtenteLogic().updateRisposteUtente(utente);
            return true;
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
        [OperationContract]
        public List<ProfiliDTO> getProfiliInfo(Utente utente)
        {
            try
            {
                return new ProfiloLogic().calcolaProfili(utente.Username);
            
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }

        [OperationContract]
        public List<UtenteProfiliDTO> getProfiliInfoFromUsers(List<DTOUtente> utenti)
        {
            try
            {

                return new ProfiloLogic().calcolaProfili(utenti);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
        [OperationContract]
        public void deleteUtenti(List<DTOUtente> utenti)
        {
            try
            {

                new UtenteLogic().deleteUtenti(utenti);
            }
            catch (Exception e)
            {
                log.Error("Errore nella chiamata", e);
                throw e;
            }
        }
       
    }

}
